import {setRefershToken,setAccessToken,getAccessToken, removeAccessToken} from '../config/stroage'
import { message } from 'antd';
import { refreshTokenApi } from "../apis/login";
let subrequest = <any>[]
let flag = false   // 设置开关，保证一次只能请求一次短token，防止客户多此操作，多次请求

// 把过期的请求放在数组里
export const addRequest = (request:any)=>{
    subrequest.push(request)
}

// 发送中断的请求
export const subRequest = ()=>{
    subrequest.forEach((request:Function)=>request())
    subrequest = []
}

// 短token过期 重新去请求长token
export const refreshToken = ()=>{
    // 如果为假说明没有请求 直接发送
    if(!flag){
        flag = true
        // 获取长token
        let accessToken = getAccessToken()
        if(accessToken){
            refreshTokenApi().then((res:any)=>{
                console.log(res);
                if(res.code === 4009){
                    //过期了   删掉长token
                    removeAccessToken()
                    flag = false
                    message.error('登陆过期 请重新登录', 1, ()=>{ window.location.hash="/login"})
                }else if(res.code === 2000){
                    // 没过期返回了新的token 存储起来
                    setAccessToken(res.accessToken)
                    setRefershToken(res.refreshToken)
                    flag = false
                    subRequest()
                }
            })
        }
    }
}